#ifndef IMAGE_HPP
#define IMAGE_HPP

//------------------------------------------------------------------------------
// Fichier d'entête utilisés
//------------------------------------------------------------------------------
#include "Layer.hpp"
#include "Gradiant.hpp"
#include "Mask.hpp"

namespace ImageAnalysis
{
//----------------------------------------------------------------------
// Cette classes correspond à une image en général, sans
// informations sur son codage (RGB, GrayScale...). Elle correspond
// surtout à un ensemble de pixels possédant des valeurs. Comme il
// s'agit d'une classe héritant de layer, on a des informations sur 
// le voisinage de chaque pixels.
//----------------------------------------------------------------------
class Image : public Layer
{
public:
        //----------------------------------------------------------------------
        // Structure
        //----------------------------------------------------------------------

        //----------------------------------------------------------------------
        // Constructeur
        //----------------------------------------------------------------------
        Image( int width, int height );

        //----------------------------------------------------------------------
        // Destructeur
        //----------------------------------------------------------------------
        virtual ~Image();

        //----------------------------------------------------------------------
        // Permet de récupérer la valeur d'un pixel.
		// Contrat : l'indice doit correspondre à un pixel
        //----------------------------------------------------------------------
        virtual unsigned char* GetPixel( int index )=0;

        //----------------------------------------------------------------------
        // Permet de fixer la valeur d'un pixel.
		// Contrat : l'index doit correspondre à un pixel.
        //----------------------------------------------------------------------
        virtual void SetPixel( int index, unsigned char* value )=0;		
		
protected:
        //----------------------------------------------------------------------
        // Structure permettant de stocker les pixels de l'image
        //----------------------------------------------------------------------
        unsigned char* pixels;
private:
        //----------------------------------------------------------------------
        // Constructeur par copie et oprérateur d'affectation en privée pour
        // interdire leur utilisation
        //----------------------------------------------------------------------
        Image( const Image& copy);
        Image& operator=( const Image& copy );
};

}
#endif //IMAGE_HPP
